/*
 * 观察者模式: 定义了一系列对象之间的一对多关系。当一个对象改变状态是，它的所有依赖者都会收到通知并自动更新。
 *
 * 设计原则: 为交互对象之间的松耦合设计而努力
 * 
 * example context: 日志按行读取，有不同的统计报告需求，而且根据需求不同会有新增加的统计需求
 *
 */

package headfirst.observer;

class HFObserver
{
	public static void main(String[] args)
	{
		System.out.println("in HFObserver");
		
		LogReader thereader = new LogReader();
		
		CountByCategory peopleCounter = new CountByCategory();
		thereader.registerOberserver(peopleCounter);
		thereader.doReadFile("/home/jiening/log/test1.log");

		CountByCategory cateCounter = new CountByCategory();
		thereader.registerOberserver(cateCounter);
		thereader.doReadFile("/home/jiening/log/test2.log");

		thereader.removeObserver(peopleCounter);
		thereader.doReadFile("/home/jiening/log/test3.log");
	
		peopleCounter.showCountResult();
		cateCounter.showCountResult();
	}
}
